import errorCode from './errorCode'
import { Message } from 'element-ui'
import router from '@/router'
import { setToken, getRefreshToken } from '@/utils/auth'
import * as api from '@/api/login'
/* 根据错误码做不同的处理 */
const errorHandles = {
  '1001'() {  // 用户授权错误
    router.push({ path: '/login' })
    Message({
      message: '认证信息失效，请重新登录',
      type: 'warning',
      duration: 4000
    })
  },
  '1005'() {  // refreshToken过期
    router.push({ path: '/login' })
    Message({
      message: '认证失败，请重新登录',
      type: 'warning',
      duration: 4000
    })
  },
  defalut(code, msg) {
    console.log(`unknown error:${msg}`)
    Message({
      message: msg,
      type: 'error',
      duration: 4000
    })
  },
  abort(msg) {
    Message({
      message: msg,
      type: 'error',
      duration: 3000
    })
  }
}
function _has(errorHandles, errCode) {
  for (var item in errorHandles) {
    if (Number(item) === errCode) {
      return true
    }
  }
}
function _includes(errorCode, errCode) {
  for (var item in errorCode) {
    if (Number(item) === errCode) {
      return true
    }
  }
}
export function handleErrorCode(res) {
  const data = res.data
  const errCode = Number(data.code)
  const errMsg = errorCode[errCode] || `[Error${data.code}] ${data.msg} (${data.friendlyMsg})`
  return new Promise((resolve, reject) => {
    if (_has(errorHandles, errCode)) {
      const handler = errorHandles[errCode]
      handler(errCode, errMsg)    // 当错误码定义在errorHandles对象中做自定义处理时，调用此方法
    } else if (_includes(errorCode, errCode)) {
      errorHandles.abort(errMsg)  // 当错误码配置在errorCode配置文件中时，调用此方法（弹框显示配置文件中的文字信息）
    } else {
      errorHandles.defalut(errCode, errMsg)  // 当以上情况都不出现时，调用此默认方法，弹框显示friendlyMsg
    }
    resolve(res)
  })
}
